package com.egg.auth.service.role;

import com.egg.auth.entity.role.Role;
import com.egg.auth.model.request.web.RolePostOrPut;
import com.egg.auth.model.response.web.RoleInfo;
import com.egg.common.mybatis.service.IBaseService;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Optional;


public interface IRoleService extends IBaseService<Role> {


    void delRole(Collection<? extends Serializable> ids);

    /**
     * 查询用户的角色
     *
     * @param userId
     * @return
     */
    List<Role> findByUserId(Serializable userId);

    /**
     * 查询用户开启的角色
     *
     * @param userId
     * @return
     */
    List<Role> findEnabledByUserId(Serializable userId);

    /**
     * 是否超级管理员
     *
     * @return
     */
    boolean hasAdmin(Role role);
    boolean hasAdmin(List<Role> list);


    /**
     * 是否 WEB 成员
     *
     * @return
     */
    boolean hasWeb(Role role);
    boolean hasWeb(List<Role> list);


    /**
     * 是否 API 成员
     *
     * @return
     */
    boolean hasApi(Role role);
    boolean hasApi(List<Role> list);

    /**
     * 是否 游客 成员
     *
     * @param list
     * @return
     */
    boolean hasRead(List<Role> list);

    /**
     * 查询角色
     *
     * @param authCode
     * @return
     */
    Optional<Role> findByAuthCode(String authCode);

    void put(Serializable id, RolePostOrPut param);

    Long add(RolePostOrPut param);

    void fillDept(RoleInfo roleInfo);

    /**
     * 用户拥有功能权限
     *
     * @param userId
     * @return
     */
    List<String> findFuncPermByUserId(Serializable userId);

    /**
     * 用户拥有的数据权限
     * redis
     *
     * @param userId
     * @return
     */
    List<Long> findDataPermByUserId(Serializable userId);

}
